package com.slwu.singleton;

/**
 * 枚举单例模式
 * 优点：
 * 1. 线程安全，因为是枚举，所以在多线程环境下，不会出现多个实例
 * 2. 避免了反射攻击，因为枚举的构造方法是私有的，所以无法通过反射来创建枚举实例
 * 3. 避免了反序列化攻击，因为枚举的序列化机制
 * @author wushaolin
 * @since 2023-11-22
 */
public class EnumSingleton {
    private EnumSingleton() {
    }

    public static EnumSingleton getInstance() {
        return SingletonEnum.INSTANCE.getInstance();
    }

    private enum SingletonEnum {
        INSTANCE;
        private EnumSingleton instance;

        SingletonEnum() {
            instance = new EnumSingleton();
        }

        public EnumSingleton getInstance() {
            return instance;
        }
    }
}
